class LinkedList:
    def update(self, id, title=None, author=None, category=None):
        current = self.head
        while current is not None:
            if current.book.id == id:
                if title:
                    current.book.title = title
                if author:
                    current.book.author = author
                if category:
                    current.book.category = category
                return True
            current = current.next
        return False
class HashTable:
    def update(self, id, title=None, author=None, category=None):
        index = self.hash_function(id)
        if self.table[index] is not None:
            return self.table[index].update(id, title, author, category)
        return False
class HashTable:
    def delete(self, id):
        index = self.hash_function(id)
        if self.table[index] is not None:
            return self.table[index].delete(id)
        return False
class BinarySearchTree:
    def find(self, category):
        return self._find(self.root, category)

    def _find(self, node, category):
        if node is None:
            return None
        if category == node.category:
            return node
        elif category < node.category:
            return self._find(node.left, category)
        else:
            return self._find(node.right, category)

